﻿//Copyright 2008 Kristian Gundry And Rune Juhl-Petersen
//This file is part of Plain.

//Plain is free software: you can redistribute it and/or modify
//it under the terms of the GNU Lesser General Public License as published by
//the Free Software Foundation, either version 3 of the License, or
//any later version.

//Plain is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//GNU Lesser General Public License for more details.

//You should have received a copy of the GNU Lesser General Public License
//along with Plain.  If not, see <http://www.gnu.org/licenses/>.
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;

namespace Plain.Validation{
    /// <summary>
    /// Validate against a regular expression
    /// </summary>
    public class Expression:Attribute,IValidationAttribute{
        /// <summary>
        /// Returns the expression used to validate the property
        /// </summary>
        public string Value { get { return Ex.ToString(); } }

        private Regex Ex { get; set; }
        /// <summary>
        /// use the <paramref name="ex"/> to set the expression to validate against
        /// </summary>
        /// <param name="ex"></param>
        public Expression(string ex) {
            Ex = new Regex(ex);
        }
        #region IValidationAttribute Members
        /// <summary>
        /// implementation of IValidationAttribute.Validate
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="property"></param>
        /// <returns></returns>
        public bool Validate(object entity, object property){
            if (property != null) {
                return Ex.IsMatch(property.ToString(), 0);      }
            else {
                return true;
            }
        }
        #endregion
    }
}
